// ==============================================================================
// | 包: main                                                                  |
// | 功能: JWT令牌生成和解析测试程序                                           |
// | 说明: 测试JWT令牌的创建和验证功能                                          |
// ==============================================================================
package main

import (
	"blog_server/core"       // 核心初始化包
	"blog_server/flags"      // 命令行参数包
	"blog_server/global"     // 全局变量包
	"blog_server/utils/jwts" // JWT工具包
	"fmt"                    // 格式化输出包
)

// ==============================================================================
// | 函数: main                                                                |
// | 功能: 主函数，测试JWT令牌的生成和解析                                      |
// |----------------------------------------------------------------------------|
// | 流程:                                                                     |
// | 1. 初始化系统环境                                                          |
// | 2. 生成JWT令牌                                                            |
// | 3. 解析JWT令牌                                                            |
// ==============================================================================
func main() {
	// 解析命令行参数
	flags.Parse()
	// 读取配置文件
	global.Config = core.ReadConf()
	// 初始化日志系统
	core.InitLogrus()
	// 已注释: 使用用户名生成令牌的旧方式
	// token, err := jwts.GetToken("fengfeng")
	// 使用Claims结构体生成令牌，包含用户ID和角色
	token, err := jwts.GetToken(jwts.Claims{
		UserID: 1, // 用户ID
		Role:   2, // 用户角色
	})
	// 打印生成的令牌和错误信息
	fmt.Println(token, err)
	// 解析令牌获取Claims信息
	cls, err := jwts.ParseToken(token)
	// 打印解析结果
	fmt.Println(cls, err)
}

// ==============================================================================
// | 以下是旧版JWT实现代码（已注释）                                            |
// | 说明: 这是早期的JWT实现，现在已移至utils/jwts包中                           |
// ==============================================================================

// package jwts

// import (
// 	"errors"
// 	"fmt"
// 	"time"

// 	"github.com/dgrijalva/jwt-go"
// )

// // Token过期时间设置为2小时
// const TokenExpireDuration = time.Hour * 2

// // const TokenExpireDuration = time.Second * 60

// // JWT签名密钥
// var Secret = []byte("人生路漫漫")

// // 自定义Claims结构体
// type MyClaims struct {
// 	UserName string
// 	jwt.StandardClaims
// }

// // 生成Token
// func GetToken(username string) (string, error) {
// 	cla := MyClaims{
// 		UserName: username,
// 		StandardClaims: jwt.StandardClaims{
// 			ExpiresAt: time.Now().Add(TokenExpireDuration).Unix(), // 过期时间
// 			Issuer:    "lx-jwt",                                   // 签发人
// 		},
// 	}
// 	token := jwt.NewWithClaims(jwt.SigningMethodHS256, cla)
// 	fmt.Println("Token = ", token)
// 	return token.SignedString(Secret) // 进行签名生成对应的token
// }

// // 解析Token
// func ParseToken(tokenString string) (*MyClaims, error) {
// 	token, err := jwt.ParseWithClaims(tokenString, &MyClaims{}, func(token *jwt.Token) (interface{}, error) {
// 		return Secret, nil
// 	})
// 	if err != nil {
// 		return nil, err
// 	}
// 	if claims, ok := token.Claims.(*MyClaims); ok && token.Valid {
// 		return claims, nil
// 	}
// 	return nil, errors.New("invalid token")
// }
